#ifndef __FACTORY_METHOD__
#define __FACTORY_METHOD__

class Shape;
class IFactory
{
public:
    IFactory();
    virtual ~IFactory() = 0;
    virtual Shape* Draw() = 0;
    virtual void Erase(Shape *shape) = 0;
};

class SquareFactory : public IFactory
{
public:
    SquareFactory();
    ~SquareFactory();
    Shape* Draw();
    void Erase(Shape *shape);
};

class CircleFactory : public IFactory
{
public:
    CircleFactory();
    ~CircleFactory();
    Shape* Draw();
    void Erase(Shape *shape);
};


#endif


